草庐IT

ios - 在扩展中有网点

全部标签

ruby - 如果 gem 安装不支持, native 扩展回退到纯 Ruby

我正在开发一个gem,它目前是纯Ruby,但我也一直在为其中一个特性开发一个更快的C变体。该功能在纯Ruby中可用,但有时速度较慢。缓慢只会影响一些潜在用户(取决于他们需要哪些功能,以及他们如何使用它们),因此如果gem无法在目标系统上编译,那么让gem可以优雅地回退到Ruby-only功能是有意义的。我想在单个gem中维护该功能的Ruby和C变体,并在安装时提供gem的最佳(即最快)体验。这将使我能够从我的单个项目中支持最广泛的潜在用户。它还将允许其他人的依赖gem和项目使用目标系统上的最佳可用依赖项,而不是为了兼容性而使用最低公分母版本。我希望require在运行时回退到主lib/

c - Ruby C 扩展开发人员的命名约定

在用C为ruby​​编写扩展时,我对遵循正确的命名约定很感兴趣。具体来说,我指的是将_p添加到谓词的函数名称以及为变量添加前缀m代表模块,c代表类等等。例如,如果我们想在C语言中定义一个像下面这样的谓词方法,我们应该在定义该方法的函数中使用_p作为后缀。classMyClassdefawesome?trueendend在C中:staticVALUEmy_extension_my_class_awesome_p(VALUEself){returnQtrue;}voidInit_my_extension(void){VALUEcMyClass=rb_define_class("MyClas

ruby - 在扩展自身的模块中的实例方法中调用单例方法

我自己扩展了Kernel,在实例方法Kernel#abort的定义中,我调用了单例方法Kernel.abort:moduleKernelextendselfdefabortputs"PressENTERtoexit..."getsKernel.abortendendabort当我调用Kernel#abort时,方法定义中的Kernel.abort调用似乎是指原始的Kernel#abort(扩展为Kernel.abort)。Ruby如何知道当我写Kernel.abort时,我指的是原始的abort方法,而不是我刚刚创建的方法?我将如何递归调用我刚刚创建的新abort方法?

ruby - 在 Windows 上为 Jekyll 安装 native Ruby 扩展

我快要发疯了,所以我只想问:你到底是怎么在Windows上安装RubyGemJekyll的。Jekyll依赖于fast-stemmer-1.0.0并且必须构建为native扩展我在RubyDevKit上找到了这个方便的指南在Windows上安装一个“健全”的环境并且它可以工作,但是fast-stemmer仍然一心想使用nmake来构建二进制文件并返回以下错误:C:\ProgramFiles(x86)\MicrosoftVisualStudio10.0\VC>geminstalljekyllTemporarilyenhancingPATHtoincludeDevKit...Buildin

ruby-on-rails - 阻塞 IO/Ruby on Rails

我正在考虑使用Rails编写Web应用程序。用户发出的每个请求都取决于调用的外部API。这个外部API可能随机地非常慢(2-3秒),因此显然这会影响单个请求。在代码等待外部API返回的这段时间里,是否会阻塞进一步的用户请求?只是为了进一步澄清,因为似乎有些困惑,这是我期待的模型:Alice向我的网络应用程序发出请求。为此,调用API服务器A。API服务器A很慢,需要3秒才能完成。在Rails应用程序调用API服务器A的这段等待时间内,Bob发出了一个请求,该请求必须向API服务器B发出请求。Ruby(1.9.3)解释器(或Rails3.x框架中的某些东西)是否会阻止Bob的请求,要求他

ruby - 在散列中有条件地包含键值对

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭10年前。Improvethisquestion有人可以帮我缩短下面的方法吗?我从这个开始,我非常喜欢它:defself.some_hash{"foo"=>"bar"}end现在我想添加一个可选键。我能想到的最简洁的语法是:defself.some_hash(some_key=nil)answer={"foo"=>"bar"}answer[some_key]="yucky,long-windedsyntax"ifsome_keyanswer

ruby - Ruby 中有正则表达式删除吗?

我所有使用正则表达式删除的字符串都使用gsub,有更短的方法吗?string.gsub(/\A.*\//,'') 最佳答案 一种方法是添加您自己的简短方法:classStringdefdel(regexp)gsub(regexp,'')enddefdel!(regexp)gsub!(regexp,'')endend通常此代码将放在lib/目录中,例如lib/string-extensions.rb请注意,有些程序员真的不喜欢这个,因为它是猴子补丁。我个人喜欢在项目中使用它,因为它使代码更容易理解-一旦我有了“del”方法,我可以很快

ruby - [square brackets] 在 Ruby 中有哪些不同用途?

我在Ruby中经常遇到方括号[]语法,但它似乎从来没有做同样的事情。任何人都可以列出所有方括号[]在Ruby中的不同用途,以便我的头脑能够理解这个看似无穷无尽的小符号吗?(一个符号怎么可能做这么多而不让Ruby解释器感到困惑?)例子:[]和[]=方法%q[...][1,2,3][0]散列["a"]=3ary=[]/[^A-Fa-f0-9]/“是一个字符串”[5,3] 最佳答案 方括号在两个严格上下文和一个可选上下文中:定义数组数组,即提供元素有序列表的数据结构,可以使用类似[1,2,3]的语法在代码中指定。这将创建一个包含三个元素1

ruby-on-rails - Gem::Ext::BuildError:错误:无法构建 gem native 扩展 Bcrypt-Ruby

我正在制作一个Rails应用程序并刚刚升级到Yosemite,我认为在更新期间一切都崩溃了。昨晚当我将所有代码checkingithub时一切正常。我昨晚更新了我的电脑到优胜美地。今天我运行了geminstallbcrypt-ruby并且一切都崩溃了。我有;运行xcodebuild-license更新的bundler运行brewinstallrbenvruby​​-buildrbenv-gem-rehash以获取最新的ruby​​运行brewinstallcoreutils但这并没有奏效。环境OSXYosemite10.10、rbenv0.4.0、ruby2.1.3p242(2014-

ruby-on-rails - 如何从初始化器扩展一个类并在开发环境中重新加载它?

我通过包含一个模块来扩展一个类(在插件中),这是在初始化程序中完成的。require'qwerty/core/user'User.send:include,Qwerty::Core::Extensions::User但是在开发过程中,在每次请求之前(以及在控制台中调用reload!之后)所有模型都会重新加载,但由于初始化器不会再次运行,所以模块不包含在内。留下带有“缺失部分”的模型。因为模型在插件中,所以将代码直接包含在类中似乎不是明智的做法,这将是通常的方法。现在我只是简单地添加了一个before_filter,它包含了开发环境中的模块。但是我有复制/粘贴并且在初始化程序和应用程序C